#region Usings

using System;
using System.Text;

#endregion

namespace Karma.Framework.Core.Crypto
{
    /// <summary>
    /// conjunto de utilerias sobre cadenas.
    /// </summary>
    public class StringUtil
    {
        ///<summary>
        /// Convierte el arreglo de bytes a una cadena en formato hexadecimal.
        ///</summary>
        ///<param name="bytes">Arreglo de bytes con los datos a convertir</param>
        ///<returns>Cadena convertida a formato hexadecimal.</returns>
        public static string BytesToHex(byte[] bytes)
        {
            var hexString = new StringBuilder(bytes.Length);
            for (var i = 0; i < bytes.Length; i++)
            {
                var tmp = bytes[i].ToString("X");
                if (tmp.Length < 2)
                {
                    tmp = "0" + tmp;
                }
                hexString.Append(tmp);
            }
            return hexString.ToString();
        }

        ///<summary>
        /// Convierte una cadena en formato hexadecimal a bytes.
        ///</summary>
        ///<param name="Data">Cadena en formato hexadecimal</param>
        ///<returns>Bytes en base 64</returns>
        public static string HexToBytes(string Data)
        {
            if (Data.Length%2 > 0)
            {
                Data = "0" + Data;
            }
            var arre = new byte[Data.Length/2];
            for (var i = 0; i < Data.Length; i += 2)
            {
                arre[i/2] = Convert.ToByte(Data.Substring(i, 2), 16);
            }
            return Convert.ToBase64String(arre);
        }
    }
}